package org.eclipse.snippets.code;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;

public class TabbedShellExample {

	Display d;

	Shell s;

	TabbedShellExample() {
		d = new Display();
		s = new Shell(d);

		s.setSize(250, 200);

		s.setText("A Tabbed Shell Example");
		s.setLayout(new FillLayout());

		TabFolder tf = new TabFolder(s, SWT.BORDER);

		TabItem ti1 = new TabItem(tf, SWT.BORDER);
		ti1.setText("Option Group");
		ti1.setControl(new GroupExample(tf, SWT.SHADOW_ETCHED_IN));

		TabItem ti2 = new TabItem(tf, SWT.BORDER);
		ti2.setText("Grid");
		ti2.setControl(new GridComposite(tf));

		TabItem ti3 = new TabItem(tf, SWT.BORDER);
		ti3.setText("Text");
		Composite c1 = new Composite(tf, SWT.BORDER);
		c1.setLayout(new FillLayout());
		Text t = new Text(c1, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
		ti3.setControl(c1);

		TabItem ti4 = new TabItem(tf, SWT.BORDER);
		ti4.setText("Settings");
		Composite c2 = new Composite(tf, SWT.BORDER);
		c2.setLayout(new RowLayout());
		Text t2 = new Text(c2, SWT.BORDER | SWT.SINGLE | SWT.WRAP
				| SWT.V_SCROLL);
		Button b = new Button(c2, SWT.PUSH | SWT.BORDER);
		b.setText("Save");
		ti4.setControl(c2);

		s.open();
		while (!s.isDisposed()) {
			if (!d.readAndDispatch())
				d.sleep();
		}
		d.dispose();
	}
}

class GroupExample extends Composite {

	final Button b1;

	final Button b2;

	final Button b3;

	public GroupExample(Composite c, int style) {
		super(c, SWT.NO_BACKGROUND);
		this.setSize(110, 75);
		this.setLayout(new FillLayout());
		final Group g = new Group(this, style);
		g.setSize(110, 75);
		g.setText("Options Group");
		b1 = new Button(g, SWT.RADIO);
		b1.setBounds(10, 20, 75, 15);
		b1.setText("Option One");
		b2 = new Button(g, SWT.RADIO);
		b2.setBounds(10, 35, 75, 15);
		b2.setText("Option Two");
		b3 = new Button(g, SWT.RADIO);
		b3.setBounds(10, 50, 80, 15);
		b3.setText("Option Three");
	}

	public String getSelected() {
		if (b1.getSelection())
			return "Option One";
		if (b2.getSelection())
			return "Option Two";
		if (b3.getSelection())
			return "Option Three";
		return "None Selected";
	}

}

class GridComposite extends Composite {

	public GridComposite(Composite c) {
		super(c, SWT.BORDER);
		GridLayout gl = new GridLayout();
		gl.numColumns = 3;
		this.setLayout(gl);
		final Label l1 = new Label(this, SWT.BORDER);
		l1.setText("Column One");
		final Label l2 = new Label(this, SWT.BORDER);
		l2.setText("Column Two");
		final Label l3 = new Label(this, SWT.BORDER);
		l3.setText("Column Three");
		final Text t1 = new Text(this, SWT.SINGLE | SWT.BORDER);
		final Text t2 = new Text(this, SWT.SINGLE | SWT.BORDER);
		final Text t3 = new Text(this, SWT.SINGLE | SWT.BORDER);
		final Text t4 = new Text(this, SWT.SINGLE | SWT.BORDER);
		final Text t5 = new Text(this, SWT.SINGLE | SWT.BORDER);
		final Text t6 = new Text(this, SWT.SINGLE | SWT.BORDER);

		GridData gd = new GridData();
		gd.horizontalAlignment = GridData.CENTER;
		l1.setLayoutData(gd);

		gd = new GridData();
		gd.horizontalAlignment = GridData.CENTER;
		l2.setLayoutData(gd);

		gd = new GridData();
		gd.horizontalAlignment = GridData.CENTER;
		l3.setLayoutData(gd);

		gd = new GridData(GridData.FILL_HORIZONTAL);
		t1.setLayoutData(gd);

		gd = new GridData(GridData.FILL_HORIZONTAL);
		t2.setLayoutData(gd);

		gd = new GridData(GridData.FILL_HORIZONTAL);
		t3.setLayoutData(gd);

		gd = new GridData(GridData.FILL_HORIZONTAL);
		t4.setLayoutData(gd);

		gd = new GridData(GridData.FILL_HORIZONTAL);
		t5.setLayoutData(gd);

		gd = new GridData(GridData.FILL_HORIZONTAL);
		t6.setLayoutData(gd);
	}

}
